package com.cacho.s2b.lesson.learn;

import java.util.Map;
import java.util.HashMap;

/**
 * @Description 映射（Maps）用于存储键值对(key-value)，常见的实现有 HashMap 和 TreeMap。
 * @HashMap 1.基于哈希表实现的键值对存储结构；2.高效的查找、插入和删除操作；3.无序，不会记录插入的顺序;
 *          4.最多允许一条记录的键为 null，不支持线程同步；5.HashMap 中的元素实际上是对象，一些常见的基本类型可以使用它的包装类Integer
 * @Author LingWei
 * @date 2023/12/31
 **/
public class LearnMaps {
    public static void main(String[] args) {
        Map <String,String> map = new HashMap<>();  // 创建一个默认初始大小，负载因子为默认的map
        Map <Integer,String> map1 = new HashMap<>(16);    // 创建一个默认初始大小16，负载因子为默认的map
        Map<Object, Object> map2 = new HashMap<>(1,0.7f);    // 创建一个默认初始大小16，负载因子为0.7的map
        map.put("userId","cacho");
        map.put("password","CACHO");
        map.put(null,"最多一个键为 null");
        map.put(null,"第二个键为 null, 覆盖第一个键");
        map.put("password","覆盖相同键的key-value");
        map2.put(1,"可以为不同数据类型");
        map2.putAll(map);  // 参数是map
        System.out.println("顺序无法保证"+map);
        System.out.println(""+map2);

        System.out.println("A.使用 get(key) 方法来获取 key 对应的 value："+map2.get(1));
        System.out.println("B.获取指定 key 对应对 value，如果找不到 key ，则返回设置的默认值："+map2.getOrDefault(2,"赋默认值"));
        System.out.println("C.返回 hashMap 中存在的所有 value 值："+map.values());
        System.out.println("containsKey(key)map的key是否存在，返回true或者false："+map.containsKey("user")); // false

        // 1. 遍历map,推荐，特别是容量大
        for(Map.Entry<String,String> e :map.entrySet()){
            String k = e.getKey(); // 获取key值
            String v = e.getValue(); // 获取value值
            System.out.println("key值为："+k+", " +"value值为："+v);
        }
    }
}
